package com.dxjia.doubantop.net; import android.text.TextUtils; import com.squareup.okhttp.OkHttpClient; import java.util.List; import java.util.concurrent.TimeUnit; import retrofit.RestAdapter; import retrofit.client.OkClient; /** * Created by dxjia on 2015-9-8. * Use retrofit library for douban RESTFUL api */ public class DoubanApiUtils { // douban api v2 version base uri public final static String DOUBAN_API_V2_BASE_URI = "https://api.douban.com/v2/"; private static DoubanMovieApiService mApiService = null; // douban api key, change to yourself in assets/api_infos.xml public final static String API_KEY = getDoubanApiKey(); public final static String SECRET = getDoubanApiSecret(); public final static int API_TYPE_UNKOWN = -1; public final static int API_TYPE_US_BOX = 0; public final static int API_TYPE_TOPS = 1; public final static int API_TYPE_SEARCH = 2; // sigleton public static DoubanMovieApiService getMovieApiService() { if (mApiService == null) { OkHttpClient mOkHttpClient = new OkHttpClient(); mOkHttpClient.setConnectTimeout(15, TimeUnit.SECONDS); RestAdapter restAdapter = new RestAdapter.Builder() .setLogLevel(RestAdapter.LogLevel.FULL) .setEndpoint(DOUBAN_API_V2_BASE_URI) .setClient(new OkClient(mOkHttpClient)) .build(); mApiService = restAdapter.create(DoubanMovieApiService.class); } return mApiService; } /** * 将网址带上api key * @param uri * @param useQ true for use ? append, false for using & * @return */ public static String appendApiKey(String uri, boolean useQ) { if (TextUtils.isEmpty(uri)) return null; if (TextUtils.isEmpty(API_KEY)) return uri; return useQ ? (uri + "?apikey=" + API_KEY) : (uri + "&apikey=" + API_KEY); } private static String getDoubanApiKey() { String apikey = ""; // parsing xml List<ApiInfosUtil.ApiInfo> apiInfos = ApiInfosUtil.parseApiInfos(); if (apiInfos != null) { for (ApiInfosUtil.ApiInfo apiInfo : apiInfos) { if (apiInfo.getSource() == ApiInfosUtil.API_SOURCE_DOUBAN) { apikey = apiInfo.getApikey(); break; } } } return apikey; } private static String getDoubanApiSecret() { String secret = ""; // parsing xml List<ApiInfosUtil.ApiInfo> apiInfos = ApiInfosUtil.parseApiInfos(); if (apiInfos != null) { for (ApiInfosUtil.ApiInfo apiInfo : apiInfos) { if (apiInfo.getSource() == ApiInfosUtil.API_SOURCE_DOUBAN) { secret = apiInfo.getSecret(); break; } } } return secret; } }